unit ImportarTXTEntrada;

interface

uses ImportarDocumentosEntrada, Classes;

type

  TArrayImportacao = array[0..2] of string;

  TMatrizImportacao = array of TArrayImportacao;

  TImportarTXTEntrada = class(TImportarDocumentosEntrada)
  private
    FArquivoImp : TStrings;
    function GetArrayProd: TMatrizImportacao;
    function CortarStr(amostra: string; ComecaDe: integer): string;
  protected
    procedure AbrirArquivo;override;
    function ImportarDadosEntrada: TDocumentoEntrada;override;
    function ImportarFornecedor: TForncedor;override;
    function ImportarProdutos: TArrayDadosProdutos;override;
  public
    constructor Create;reintroduce;
    destructor Destroy; override;
  end;

implementation

uses SysUtils;

{ TImportarTXTEntrada }

procedure TImportarTXTEntrada.AbrirArquivo;
begin
  inherited;
  FArquivoImp.Clear;
  FArquivoImp.LoadFromFile(ArquivoImportacao);
end;

constructor TImportarTXTEntrada.Create;
begin
   FArquivoImp := TStringList.Create;
end;

destructor TImportarTXTEntrada.Destroy;
begin
  FArquivoImp.Free;
  inherited;
end;

function TImportarTXTEntrada.ImportarDadosEntrada: TDocumentoEntrada;
begin
  Result := TDocumentoEntrada.Create;
  Result.Empresa := Empresa;
  Result.CFOP := CFOP;
end;

function TImportarTXTEntrada.CortarStr(amostra : string; ComecaDe : integer ) : string;
begin
   Delete(amostra,1,ComecaDe);
   Result := amostra;
end;

function TImportarTXTEntrada.GetArrayProd: TMatrizImportacao;
var
  i , j , total: integer;
  Matriz : TMatrizImportacao;
begin
  i := FArquivoImp.IndexOf('Codigo                        |     Quantidade|      Valor Unitario') + 1;
  SetLength(Matriz,FArquivoImp.Count - i);
  total := FArquivoImp.Count - i;
  for j := 0 to total - 1 do begin
    Matriz[j][0] := Trim(copy(FArquivoImp.Strings[j + i ],1,30));
    Matriz[j][1] := trim(copy(FArquivoImp.Strings[j + i ],33,14));
    Matriz[j][2] := trim(copy(FArquivoImp.Strings[j + i ],48,20));
  end;
  Result := Matriz;
end;

function TImportarTXTEntrada.ImportarFornecedor: TForncedor;
begin
  Result := ResgatarFornecedor(CortarStr(FArquivoImp.Strings[12],17));
  if Result = nil then begin
    Result := TForncedor.Create;
    Result.Nome := CortarStr(FArquivoImp.Strings[5],17);
    Result.Estado := CortarStr(FArquivoImp.Strings[8],17);
    Result.Cidade := BuscarCidadePorNome(CortarStr(FArquivoImp.Strings[7],17),Result.Estado);
    Result.CNPJ := CortarStr(FArquivoImp.Strings[12],17);
    Result.Endereco := CortarStr(FArquivoImp.Strings[6],17);
    Result.InscricaoEstadual := CortarStr(FArquivoImp.Strings[13],17);
  end;
end;

function TImportarTXTEntrada.ImportarProdutos: TArrayDadosProdutos;
var
  Matriz : TMatrizImportacao;
  DescProd : string;
  i : integer;
begin
  Matriz := GetArrayProd;
  SetLength(Result,Length(Matriz));
  if Length(Matriz) > 0 then begin
    for i := 0 to Length(Matriz) - 1 do begin
      DescProd := Trim( Copy( Matriz[i][0],1,40) );
      Result[i] := ResgatarProdutos( DescProd );
      if Result[i] = nil then begin
        Result[i]                := TDadosProduto.Create;
        Result[i].Codigo         := Matriz[i][0]; //FormatDateTime('ddmmyyhhnn',Now) + Format('%.3d',[RandomRange(0,100)]);
        Result[i].Descricao      := Matriz[i][0];   //Prod.xProd;
        Result[i].DataCadastro   := Now;
        Result[i].Secao          := Secao;
        Result[i].Subsecao       := SubSecao;
        Result[i].Marca          := Marca;
        Result[i].Unidade        := 'UN';
        Result[i].Empresacodigo  := Empresa;
        Result[i].Quantidade     := StrToFloatDef(Matriz[i][1],0);
        Result[i].Sitcod         := Situacao;
        Result[i].Ipicod         := IPI;
        Result[i].PrecoCompra    := StrToFloatDef(Matriz[i][2],0);
        Result[i].PrecoCusto     := StrToFloatDef(Matriz[i][2],0);
        Result[i].PrecoVenda     := StrToFloatDef(Matriz[i][2],0);
        Result[i].IdfCod         := InserirProduto(Result[i]);
      end
      else begin
        Result[i].Empresacodigo  := Empresa;
        Result[i].Quantidade     := 1;
        Result[i].Sitcod         := Situacao;
        Result[i].Ipicod         := IPI;
        Result[i].PrecoCompra    := StrToFloatDef(Matriz[i][2],0);
        Result[i].PrecoCusto     := StrToFloatDef(Matriz[i][2],0);
        Result[i].PrecoVenda     := StrToFloatDef(Matriz[i][2],0);
      end;
    end;
  end;
end;

end.
